#####################
# general structure #
#####################

xrnlib-cli \
           --decoding-conf   -options \
           --encoding-conf   -options \
           --arithmetic-conf -options \
           --sequence-conf   -options \
           --permutation-conf  -options \
           --logging-conf  -options \ #optional
           --command -options

xrnlib-cli --help command
xrnlib-cli --script command
xrnlib-cli --example command
xrnlib-cli --version


#################################
# level configuration functions #
#################################

--decoding-conf
    -compiled-param
    -encoding-param               path
    -no-param
    -no-password
    -password-str                 str
    -init-file                    path
    -no-running-err
    -running-err-th               int
    -running-war-th               int
    -no-disparity-err
    -disparity-err-th             int
    -disparity-war-th             int

--encoding-conf
    -compiled-param
    -encoding-param               path
    -no-param
    -no-password
    -password-str                 str
    -init-file                    path
    -no-running-err
    -running-err-th               int
    -running-war-th               int
    -no-disparity-err
    -disparity-err-th             int
    -disparity-war-th             int

--arithmetic-conf
    -point                        path
    -binomial-key                 path
    -monomial-key                 path
    -start-point                  path
    -monomial-commitment          path
    -binomial-commitment          path
    -monomial-response            path
    -monomial-proof               path
    -monovalent-key               path
    -polyvalent-proof             path
    -polyvalent-key               path
    -sym-signature                path
    -asy-signature                path
    -ring-signature               path
    -hash                         path
    -sym-certificate              path
    -asy-certificate              path
    -state-size                   {4..255}
    -crc-bits                     {8,16,32,64}
    -rnd-str                      str
    -no-thread
    -no-const-exec-time

--sequence-conf
    -xmatrix-comp                 path
    -xmatrix                      path

--permutation-conf
    -shared-lib                   path
    -arch                         {128,256}

####################
# logging function #
####################

--logging-conf
    -command-line-log             path
    -lib-error-log                path
    -lib-warning-log              path
    -lib-info-log                 path
    -lib-debug-log                path
    -no-command-line-log
    -no-lib-error-log
    -no-lib-warning-log
    -no-lib-debug-log
    -debug-seed                   int
    -force-write
    -force-append

#####################
# encoder functions #
#####################

--dump-encoding-param
    -encoding-param               path

--decode-encode
    -to-decode                    path
    -to-encode                    path

######################
# sequence functions #
######################

--mine-xmatrix-comp-rnd
    -prob-ones                    float
    -max-tries                    int
    -xmatrix-comp                 path
    -random
    -pseudo-random

--mine-xmatrix-comp-ot
    -min-ones-per-row             int
    -max-ones-per-row             int
    -max-tries                    int
    -xmatrix-comp                 path
    -random
    -pseudo-random

--permute-xmatrix-comp-random
    -xmatrix-comp                 path

--permute-xmatrix-comp-deterministic
    -xmatrix-comp                 path

--decompress-xmatrix
    -xmatrix                      path

--check-xmatrix-comp

--check-xmatrix

##########################################
# confidential pseudo random number generation #
##########################################

--make-point
    -point                        path

--make-confidential-pseudo-random-number
    -next-point                   path


####################################
# classical key exchange functions #
####################################

--make-start-point
    -start-point                  path

--make-monomial-key
    -monomial-key                 path

--make-binomial-key
    -binomial-key                 path

--exchange-monomial-key
    -external-binomial-key        path
    -shared-monomial-key          path

##################################
# quantum key exchange functions #
##################################

--make-monovalent-key
    -monovalent-key               path
    -polyvalent-key               path
    -polyvalent-proof             path
    -start-timestamp              int
    -end-timestamp                int

--exchange-polyvalent-key
    -external-monovalent-key      path
    -shared-polyvalent-key        path

--check-monovalent-key

#########################
# zero knowledge proofs #
#########################

--make-commitment-binomial-key
    -monomial-commitment          path
    -binomial-commitment          path

--make-commitment-sym-signature
    -plain-text                   path
    -monomial-commitment          path
    -binomial-commitment          path

--make-commitment-sym-certificate
    -monomial-commitment          path
    -binomial-commitment          path

--make-response
    -monomial-response            path

--make-monomial-proof
    -monomial-proof               path

--make-monomial-proof-sym-signature
    -monomial-proof               path
    -plain-text                   path

--make-monomial-proof-sym-certificate
    -monomial-proof               path

--check-monomial-proof

--check-monomial-proof-sym-signature
    -plain-text                   path

--check-monomial-proof-sym-certificate

###############################
# signatures and certificates #
###############################

--make-signature-symmetric
    -plain-text                   path
    -symmetric-signature          path

--make-signature-asymmetric
    -plain-text                   path
    -asymmetric-signature         path

--make-ring-signature
    -add-decoy-binomial-key       path
    -plain-text                   path
    -verifier-binomial-key        path
    -ring-signature               path

--make-certificate-symmetric
    -subject-monovalent-key       path
    -subject-str                  str
    -symmetric-certificate        path
    -start-timestamp              int
    -end-timestamp                int

--make-certificate-asymmetric
    -subject-binomial-key         path
    -subject-str                  str
    -asymmetric-certificate       path
    -start-timestamp              int
    -end-timestamp                int

--check-signature-symmetric
    -plain-text                   path

--check-signature-asymmetric
    -plain-text                   path

--check-ring-signature
    -plain-text                   path

--check-certificate-symmetric

--check-certificate-asymmetric

######################
# hash and checksums #
######################

--make-hash
    -plain-text                   path
    -hash                         path

--make-checksum
    -plain-text                   path
    -checksum-text                path

--check-checksum
    -plain-text                   path
    -checksum-text                path

--check-hash
    -plain-text                   path

########################
# conversion functions #
########################

--convert-hash-to-point
    -point                       path

--convert-point-to-monomial-key
    -monomial-key                path

--convert-monomial-key-to-point
    -point                       path

--convert-binomial-key-to-start-point
    -start-point                 path

--convert-start-point-to-point
    -point                       path

--convert-point-to-start-point
    -start-point                 path

--convert-monomial-key-to-monomial-commitment
    -monomial-commitment         path

--convert-monomial-commitment-to-monomial-key
    -monomial-key                path

#####################
# ciphers functions #
#####################

--split-symmetric
    -plain-text                   path
    -challenge-text               path
    -solution-text                path

--encrypt-asymmetric
    -plain-text                   path
    -cipher-text                  path

--encrypt-symmetric
    -plain-text                   path
    -cipher-text                  path

--join-symmetric
    -plain-text                   path
    -challenge-text               path
    -solution-text                path

--decipher-asymmetric
    -plain-text                   path
    -cipher-text                  path

--decipher-symmetric
    -plain-text                   path
    -cipher-text                  path

###################
# block functions #
###################

--check-complete-block
    -block-file                   path

--make-block
    -offset                       int
    -length                       int
    -tag                          int
    -plain-text                   path
    -block-file                   path

--combine-blocks
    -block-file                   path
    -secondary-block-file         path
    -combined-block-file          path

--strip-header-from-block
    -block-file                   path
    -plain-text                   path

#####################
# utility functions #
#####################

--print-header
    -xrn-file                     path

--print-lib-info

###########################
# steganography functions #
###########################

--get-capacity
    -envelop-file                 path
    -disable-folding

--make-steganography-block
    -source-file                  path
    -envelop-file                 path
    -embedded-file                path
    -disable-folding
    -offset                       int
    -length                       int
    -tag                          int

--extract-steganography-block
    -embedded-file                path
    -block-file                   path

